package com.wiken.storeservice.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wiken.servicecommon.common.Code;
import com.wiken.servicecommon.common.TokenUtil;
import com.wiken.servicecommon.common.exception.DefaultException;
import com.wiken.storeservice.VO.StoreCategoriesVO;
import com.wiken.storeservice.entity.Store;
import com.wiken.storeservice.entity.StoreCategories;
import com.wiken.storeservice.entity.StoreCategoriesCommodityVO;
import com.wiken.storeservice.mapper.StoreCategoriesMapper;
import com.wiken.storeservice.service.IStoreCategoriesService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author wiken
 * @since 2022-12-28
 */
@Service
public class StoreCategoriesServiceImpl extends ServiceImpl<StoreCategoriesMapper, StoreCategories> implements IStoreCategoriesService {

    @Autowired
    StoreServiceImpl storeService;
    public boolean hasStoreKeepter(StoreCategories storeCategories, String token){
        if(token == null) throw new DefaultException(Code.ERROR_AUTHORIZATION_NULL, "操作异常");

        Claims claims = TokenUtil.parseToken(token);
        if(claims == null) throw new DefaultException(Code.ERROR_AUTHORIZATION_EXPIRATION, "用户token过期");
        String userId = claims.get("userId", String.class);

        String storeId = storeCategories.getStoreId();

        Store store = storeService.getOne(new QueryWrapper<Store>().eq("id", storeId));

        if(store == null) throw new DefaultException(Code.ERROR_STORE_NULL, "店铺不存在");

        if(!userId.equals(store.getStorekeeperId())) throw new DefaultException(Code.ERROR_AUTHORIZATION, "操作异常");

        return true;
    }
    @Override
    public boolean addStoreCategories(StoreCategories storeCategories, String token) {
//        hasStoreKeepter(storeCategories, token);

        int success = baseMapper.insert(storeCategories);
        return success > 0;
    }

    @Override
    public boolean updateStoreCategories(StoreCategories storeCategories, String token) {
        hasStoreKeepter(storeCategories, token);

        int success = baseMapper.updateById(storeCategories);
        return success > 0;
    }

    @Override
    public boolean delStoreCategories(StoreCategories storeCategories, String token) {
        hasStoreKeepter(storeCategories, token);

        int success = baseMapper.deleteById(storeCategories);
        return success > 0;
    }

    @Override
    public List<StoreCategories> getStoreCategoriesList(Store store) {
        List<StoreCategories> storeCategoriesList = baseMapper.selectList(new QueryWrapper<StoreCategories>().eq("storeId", store.getId()));
        return storeCategoriesList;
    }

    @Override
    public List<StoreCategoriesCommodityVO> getStoreCategoriesCommodityVOList(Store store) {

        List<StoreCategoriesCommodityVO> storeCategoriesCommodityVOList = baseMapper.getStoreCategoriesCommodityVOList(store);
        return storeCategoriesCommodityVOList;
    }

    @Override
    public List<StoreCategoriesVO> getStoreCategoriesListByUserId(String token) {
        String userId = TokenUtil.getUserIdByToken(token);

        List<Store> storeList = storeService.list(new QueryWrapper<Store>().eq("storekeeper_id", userId));

        ArrayList<StoreCategoriesVO> storeCategoriesVOS = new ArrayList<>();

        for(Store store : storeList){

            StoreCategoriesVO storeCategoriesVO = new StoreCategoriesVO();
            storeCategoriesVO.setStore(store);

            List<StoreCategories> storeCategories = baseMapper
                    .selectList(new QueryWrapper<StoreCategories>().eq("store_id", store.getId()));

            storeCategoriesVO.setStoreCategories(storeCategories);
            storeCategoriesVOS.add(storeCategoriesVO);
        }



        return storeCategoriesVOS;
    }
}
